אם בטבלה שאליה הוא מקושר יש קצת עמודות, והנתונים שבהם לא שוקלים הרבה - אני פשוט אשלוף את כולם כבר בבנאי של ה-Model. (או אולי לא כדאי לי?)
אבל מה עושים אם מדובר בטבלה שיש בה הרבה עמודות, ושיש שם עמודות עם נתונים ששוקלים הרבה יחסית? עדיף לא לשלוף את כולם בהנחה שיהיה בהם שימוש. (וזו בעצם התשובה לשאלה ששאלתי פה פעם.)
עכשיו נשאלת השאלה - איך לעשות את זה? האם לחלק את העמודות לקטגוריות לוגיות (ב-Model), ובבנאי יהיה אפשר לבחור איזה מהן לשלוף? אם כן, ואם הדרישות יכולות להשתנות בזמן הריצה - לספק מתודה שתאפשר בחירה חוזרת של קטגוריות של נתונים? (ואם כן, שזה ימחק מהזיכרון - במערך ב-Model - את הנתונים שלא צוינו, או שזה ישאיר אותם?)
ומה אם קראתי למתודה getCreationDate, ולא הוריתי לבנאי לשלוף את זה? לזרוק Exception שאומר שקודם צריך לומר מה לשלוף עם המתודה שדיברתי עליה בפסקה הקודמת, לשלוף את העמודה הזאת, או לשלוף את כל העמודות ב"קטגוריה" הזאת, בהנחה שאם קראתי למתודה הזאת - כנראה אני רוצה להשתמש גם במקבילות שלה?
3 תשובות
עדיף לא לשלוף שום דבר (ובטח שלא בבנאי) עד הרגע שבו אתה צריך את הנתונים בפועל.
בקשר לשאלה השניה, אם קראת למטודה getCreationDate אז היא צריכה להחזיר תאריך. אם אין לה את התאריך - היא צריכה בעצמה לשלוף אותו. המשתמש הסופי שלך לא רוצה לדעת על המימוש הפינימי של המודל ולא רוצה להפעיל לבד שליפה מהמסד עם עמודות שהוא יגיד כדי שהמודל יעבוד. הוא לא צריך לדעת שהמודל בכלל מקושר למסד.
עכשיו בחזרה לשאלה הראשונה שלך - האם לשלוף הכל או לשלוף עמודה עמודה עם הרבה שאילתות - זה הטרייד אוף שכל מתכנת מחליט בשביל עצמו (זכרון או ביצועים). במקרה הספציפי הזה אני היייתי הולך על לשלוף את כל הנתונים, גם אם לא תשתמש בהם (כי זה לא הולך לתפוס כל כך הרבה זיכרון. קילובייטים בודדים. לאומת לעשות הרבה שאילתות למסד זה סדרך כלל רעיון רע).
אוקיי, תודה. :-)
לבינתיים אני מסמן את זה כתשובה הנכונה. אם עוד מישהו רוצה לומר משהו - בשמחה. :-)
אני אוהב לעצב את המודלים בצורה כזו שיש מתודה בשם fetch או משהו בסגנון ששולפת את כל העמודות בהתאם למזהה שהעברתי בבנאי.
לדוגמה כשאני יוצר instance מהמחלקה member אני מעביר id ואז מפעיל את המתודה fetch ששולפת את כל הפרטים של המשתמש עם ה-id הזה מהמסד ומכניסה אותם למאפיינים של האובייקט.